Revert "special case all 0 to map to all 0 in nonpremul"
authorØyvind Kolås <pippin@gimp.org>
Thu, 30 Aug 2018 12:26:37 +0000 (14:26 +0200)
committerØyvind Kolås <pippin@gimp.org>
Thu, 30 Aug 2018 12:26:51 +0000 (14:26 +0200)
This reverts commit 18dea5104f3de79af5e9641a0ef47435b112d44b.

We want to be able to do component by component average/weighting of
remultiplied values, by breaking the floor for black alpha zero we
break the consistency of such arithmetic.

babl/base/model-gray.c
babl/base/model-rgb.c
extensions/double.c
extensions/fast-float.c
extensions/float.c
extensions/gegl-fixups.c
extensions/sse2-float.c

index ecbd48c89837ce638cb7ee61e71b72c07b1de350..5286fd5d672d50405c448e55099ad7efa5ca9732 100644 (file)
@@ -479,8 +479,6 @@ rgba_to_gray_alpha_premultiplied (Babl   *conversion,
           alpha = BABL_ALPHA_FLOOR;
          else if (alpha >= -BABL_ALPHA_FLOOR)
            alpha = -BABL_ALPHA_FLOOR;
-        if (red == 0.0 && green == 0.0 && blue == 0.0)
-           alpha = 0.0;
       }
 
       luminance = red * RGB_LUMINANCE_RED +
@@ -513,20 +511,10 @@ non_premultiplied_to_premultiplied (Babl  *conversion,
       double alpha = *(double *) src[src_bands-1];
       if (alpha < BABL_ALPHA_FLOOR)
       {
-        int non_zero_components = 0;
         if (alpha >= 0.0f)
           alpha = BABL_ALPHA_FLOOR;
         else if (alpha >= -BABL_ALPHA_FLOOR)
           alpha = -BABL_ALPHA_FLOOR;
-
-        for (band = 0; band < src_bands - 1; band++)
-        {
-          if (*(double *) src[band] != 0.0)
-            non_zero_components++;
-        }
-        if (non_zero_components)
-          alpha = 0.0;
-
       }
 
       for (band = 0; band < src_bands - 1; band++)
@@ -598,8 +586,6 @@ rgba2gray_nonlinear_premultiplied (Babl *conversion,
           alpha = BABL_ALPHA_FLOOR;
         else if (alpha >= -BABL_ALPHA_FLOOR)
           alpha = -BABL_ALPHA_FLOOR;
-        if (red == 0.0 && green == 0.0 && blue == 0.0)
-          alpha = 0.0;
       }
 
       luminance = red * RGB_LUMINANCE_RED +
index d4f4daae0e1e0185eb9558448b67fff912a0b28c..39c8afb872300fa7437247c93f98608e87346fd6 100644 (file)
@@ -332,16 +332,10 @@ non_premultiplied_to_premultiplied (Babl  *conversion,
 
       if (alpha < BABL_ALPHA_FLOOR)
       {
-        int non_zero_components = 0;
         if (alpha >= 0.0)
           alpha = BABL_ALPHA_FLOOR;
         else if (alpha >= -BABL_ALPHA_FLOOR)
           alpha = -BABL_ALPHA_FLOOR;
-        for (band = 0 ; band< src_bands-1; band++)
-          if (*(double *) src[band] != 0.0)
-            non_zero_components++;
-        if (non_zero_components == 0)
-          alpha = 0.0;
       }
 
       for (band = 0; band < src_bands - 1; band++)
@@ -414,10 +408,6 @@ rgba2rgba_nonlinear_premultiplied (Babl *conversion,
            alpha = BABL_ALPHA_FLOOR;
          else if (alpha >= -BABL_ALPHA_FLOOR)
            alpha = -BABL_ALPHA_FLOOR;
-        if (((double *) src)[0] == 0.0 &&
-            ((double *) src)[1] == 0.0 &&
-            ((double *) src)[2] == 0.0)
-           alpha = 0.0;
       }
 
       ((double *) dst)[0] = babl_trc_from_linear (trc[0], ((double *) src)[0]) * alpha;
@@ -597,10 +587,6 @@ rgba2rgba_perceptual_premultiplied (Babl *conversion,
           alpha = BABL_ALPHA_FLOOR;
         else if (alpha >= -BABL_ALPHA_FLOOR)
            alpha = -BABL_ALPHA_FLOOR;
-        if (((double *) src)[0] == 0.0 &&
-            ((double *) src)[1] == 0.0 &&
-            ((double *) src)[2] == 0.0)
-           alpha = 0.0;
       }
 
       ((double *) dst)[0] = babl_trc_from_linear (trc, ((double *) src)[0]) * alpha;
index 7551ab2b67cba1ed0291674957f3ad7199bfb671..502a46642b36fef2019df9bc2d0958df8db4716e 100644 (file)
@@ -48,10 +48,6 @@ conv_rgbaD_linear_rgbAD_gamma (const Babl *conversion,unsigned char *src,
            alpha = BABL_ALPHA_FLOOR;
          else if (alpha >= -BABL_ALPHA_FLOOR)
            alpha = -BABL_ALPHA_FLOOR;
-         if (fsrc[0] == 0.0f &&
-             fsrc[1] == 0.0f &&
-             fsrc[2] == 0.0f)
-           alpha = 0.0f;
        }
        *fdst++ = babl_trc_from_linear (trc[0], *fsrc++) * alpha;
        *fdst++ = babl_trc_from_linear (trc[1], *fsrc++) * alpha;
index fcc1b67f352f2f54775ad216f06d3c04c13d372d..5540185ba704312cae5c3a0fa7335e68efc00c1b 100644 (file)
@@ -315,8 +315,6 @@ conv_rgbaF_linear_rgbAF_gamma (const Babl *conversion,unsigned char *src,
              alpha = BABL_ALPHA_FLOOR;
            else if (alpha >= -BABL_ALPHA_FLOOR)
              alpha = -BABL_ALPHA_FLOOR;
-           if (red == 0.0f && green == 0.0f && blue == 0.0f)
-             alpha = 0.0f;
          }
          *fdst++ = linear_to_gamma_2_2_lut (red)   * alpha;
          *fdst++ = linear_to_gamma_2_2_lut (green) * alpha;
index 8ffd7ab0414d2b1d0719c4f55bc3b9402cfe41ea..eaa38f51f90d39bc33100e600b2d4128e78d03a4 100644 (file)
@@ -49,10 +49,6 @@ conv_rgbaF_linear_rgbAF_nonlinear (const Babl *conversion,unsigned char *src,
            alpha = BABL_ALPHA_FLOOR;
          else if (alpha >= -BABL_ALPHA_FLOOR)
            alpha = -BABL_ALPHA_FLOOR;
-         if (fsrc[0] == 0.0f &&
-             fsrc[1] == 0.0f &&
-             fsrc[2] == 0.0f)
-          alpha = 0.0f;
        }
        *fdst++ = babl_trc_from_linear (trc[0], *fsrc++) * alpha;
        *fdst++ = babl_trc_from_linear (trc[1], *fsrc++) * alpha;
@@ -80,10 +76,6 @@ conv_rgbaF_linear_rgbAF_perceptual (const Babl *conversion,unsigned char *src,
            alpha = BABL_ALPHA_FLOOR;
          else if (alpha >= -BABL_ALPHA_FLOOR)
            alpha = -BABL_ALPHA_FLOOR;
-         if (fsrc[0] == 0.0f &&
-             fsrc[1] == 0.0f &&
-             fsrc[2] == 0.0f)
-          alpha = 0.0f;
        }
        *fdst++ = babl_trc_from_linear (trc_srgb, *fsrc++) * alpha;
        *fdst++ = babl_trc_from_linear (trc_srgb, *fsrc++) * alpha;
index 8a8fe089f3731d759e31607e3d542202d397082b..70ef2d306db228ce67937b741a91369a23b6beb0 100644 (file)
@@ -386,10 +386,6 @@ conv_rgbaF_rgbAF (const Babl *conversion,unsigned char *srcc,
           alpha = BABL_ALPHA_FLOOR;
         else if (alpha >= -BABL_ALPHA_FLOOR)
           alpha = -BABL_ALPHA_FLOOR;
-        if (src[0] == 0.0f &&
-            src[1] == 0.0f &&
-            src[2] == 0.0f)
-          alpha = 0.0f;
       }
       dst[0] = src[0] * alpha;
       dst[1] = src[1] * alpha;
index 24aaa7b0acb71f6910f81e42c61a8e2b8d64ebe8..02a8c2d74e4f99c25096a6aadac6dcee99c77231 100644 (file)
@@ -60,11 +60,6 @@ conv_rgbaF_linear_rgbAF_linear (const Babl *conversion,const float *src, float *
               ((float *)s)[3] = BABL_ALPHA_FLOOR;
             else
               ((float *)s)[3] = -BABL_ALPHA_FLOOR;
-
-            if (((float *)s)[0] == 0.0f &&
-                ((float *)s)[1] == 0.0f &&
-                ((float *)s)[2] == 0.0f)
-              ((float *)s)[3] = 0.0f;
           }
           if (alpha1 < BABL_ALPHA_FLOOR)
           {
@@ -72,10 +67,6 @@ conv_rgbaF_linear_rgbAF_linear (const Babl *conversion,const float *src, float *
               ((float *)s)[7] = BABL_ALPHA_FLOOR;
             else
               ((float *)s)[7] = -BABL_ALPHA_FLOOR;
-            if (((float *)s)[4] == 0.0f &&
-                ((float *)s)[5] == 0.0f &&
-                ((float *)s)[6] == 0.0f)
-              ((float *)s)[7] = 0.0f;
           }
          {
           __v4sf rbaa0, rbaa1;
@@ -118,10 +109,6 @@ conv_rgbaF_linear_rgbAF_linear (const Babl *conversion,const float *src, float *
         a = BABL_ALPHA_FLOOR;
       else if (a >= -BABL_ALPHA_FLOOR)
         a = -BABL_ALPHA_FLOOR;
-      if (src[0] == 0.0f &&
-          src[1] == 0.0f &&
-          src[2] == 0.0f)
-        a = 0.0f;
     }
     dst[0] = src[0] * a;
     dst[1] = src[1] * a;